package com.starry.module.system.core.user.service;

import com.starry.core.common.domain.vo.PageVo;
import com.starry.module.system.api.user.domain.qo.*;
import com.starry.module.system.api.user.domain.vo.SysUserDtlVo;
import com.starry.module.system.api.user.domain.vo.SysUserLoginInfoVo;
import com.starry.module.system.api.user.domain.vo.SysUserVo;
import com.starry.module.system.core.user.entity.SysUser;

import java.util.List;
import java.util.Set;

/**
 * 系统用户-服务
 *
 * @author xiaoke
 */
public interface SysUserService {

    /**
     * 分页查询所有数据
     *
     * @param pageQo 查询实体
     * @return 所有数据
     */
    PageVo<SysUserVo> page(SysUserPageQo pageQo);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    SysUserDtlVo getByIdDtl(Long id);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    SysUser getById(Long id);

    /**
     * 获取用户信息（用户名、手机号、邮箱）
     *
     * @param value value
     * @return 单条数据
     */
    SysUser getByValue(String value);

    /**
     * 新增数据
     *
     * @param sysUserQo 实体对象
     * @return 新增结果
     */
    Long save(SysUserQo sysUserQo);

    /**
     * 通过用户Id获取用户权限
     *
     * @param userId 用户Id
     * @return 用户权限
     */
    Set<String> getByIdUserPerms(Long userId);

    /**
     * 判断用户是否存在
     *
     * @param userId 用户Id
     * @return 是否存在
     */
    boolean existUser(Long userId);

    /**
     * 判断用户是否存在
     *
     * @param userIdList 用户Id集合
     * @return 是否存在
     */
    boolean existUserList(Set<Long> userIdList);

    /**
     * 修改数据
     *
     * @param sysUserQo 实体对象
     */
    void updateById(SysUserQo sysUserQo);

    /**
     * 删除数据
     *
     * @param idList 主键集合
     */
    void removeByIds(Set<Long> idList);

    /**
     * 启用数据
     *
     * @param idList 主键集合
     */
    void enable(Set<Long> idList);

    /**
     * 禁用数据
     *
     * @param idList 主键集合
     */
    void disable(Set<Long> idList);

    /**
     * 初始化用户
     *
     * @param username 用户名
     * @return 用户信息
     */
    SysUser initialUser(String username);

    /**
     * 初始化用户
     *
     * @param user 用户信息
     * @return 用户信息
     */
    SysUser initialUser(SysUser user);

    /**
     * 获取当前登录用户信息
     *
     * @return 用户信息
     */
    SysUserLoginInfoVo getByLoginUserInfo();

    /**
     * 保存租户管理员
     *
     * @param roleIdList 角色Id集合
     */
    void saveTenantUserAdmin(Set<Long> roleIdList);

    /**
     * 获取用户列表
     *
     * @param pageQo 请求参数
     * @return 用户列表
     */
    List<SysUserVo> findList(SysUserPageQo pageQo);

    /**
     * 更新当前登录用户信息
     *
     * @param loginQo 请求参数
     */
    void updateLogin(SysUserLoginQo loginQo);

    /**
     * 更新登录信息
     *
     * @param loginInfoQo 请求参数
     */
    void updateLoginInfo(SysUserLoginInfoQo loginInfoQo);

    /**
     * 更新当前登录用户密码
     *
     * @param passwordQo 请求参数
     */
    void updatePassword(SysUserPasswordQo passwordQo);
}

